package com.hcb.webservice;

import java.io.File;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.util.List;

import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.client.utils.URLEncodedUtils;
import org.apache.http.entity.mime.HttpMultipartMode;
import org.apache.http.entity.mime.MultipartEntity;
import org.apache.http.entity.mime.content.FileBody;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.util.EntityUtils;

public class ServiceHandler {
	static String response = null;
	public final static int GET = 1;
	public final static int POST = 2;
	public final static int UPLOAD = 3;

	public ServiceHandler() {

	}

	//
	// public String makeServiceCall(String url, int method, List<NameValuePair>
	// pamram) {
	// return this.makeServiceCall(url, method, null);
	// }

	@SuppressWarnings("deprecation")
	public String makeServiceCall(String url, int method,
			List<NameValuePair> params) {
		try {
			// http client
			DefaultHttpClient httpClient = new DefaultHttpClient();
			HttpEntity httpEntity = null;
			HttpResponse httpResponse = null;

			// Checking http request method type
			if (method == POST) {
				HttpPost httpPost = new HttpPost(url);
				// adding post params
				if (params != null) {

					// MultipartEntity entity = new
					// MultipartEntity(HttpMultipartMode.BROWSER_COMPATIBLE);
					httpPost.setEntity(new UrlEncodedFormEntity(params));
				}

				httpResponse = httpClient.execute(httpPost);

			} else if (method == UPLOAD) {
				HttpPost httpPost = new HttpPost(url);
				// adding post params
				if (params != null) {
					
					
					for (int index = 0; index < params.size(); index++) {
			            if (params.get(index).getName()
			                    .equalsIgnoreCase("file_contents")) {
			                // If the key equals to "image", we use FileBody to transfer
			                // the data
			            	try {
			            		 MultipartEntity entity = new MultipartEntity(
							                HttpMultipartMode.BROWSER_COMPATIBLE);
			            		entity.addPart(params.get(index).getName(),
				                        new FileBody(new File(params.get(index)
				                                .getValue())));
							} catch (Exception e) {
								e.printStackTrace();
							}
			            	
			            } else {
			                // Normal string data
//			                entity.addPart(
//			                        nameValuePairs.get(index).getName(),
//			                        new StringBody(nameValuePairs.get(index).getValue()));
			            }
			        }

					// MultipartEntity entity = new
					// MultipartEntity(HttpMultipartMode.BROWSER_COMPATIBLE);
					
					httpPost.setEntity(new UrlEncodedFormEntity(params));
				}

				httpResponse = httpClient.execute(httpPost);

			}

			else if (method == GET) {
				// appending params to url
				if (params != null) {
					params.add(new BasicNameValuePair("query",
							"getCustomerList"));
					params.add(new BasicNameValuePair("api_secret_key",
							"3832_2hd3hdiwyu34eyeuidhd_948"));
					String paramString = URLEncodedUtils
							.format(params, "utf-8");
					url += "?" + paramString;
				}
				HttpGet httpGet = new HttpGet(url);

				httpResponse = httpClient.execute(httpGet);

			}
			httpEntity = httpResponse.getEntity();
			response = EntityUtils.toString(httpEntity);

		} catch (UnsupportedEncodingException e) {
			e.printStackTrace();
		} catch (ClientProtocolException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}

		return response;

	}
}
